gestionreseaufandomcom-20200214-history
La tour du destin : un projet de jeu de rôle en Bash
Un projet de jeu de rôle en Bash, just for fun =) Planification Des idées générales * Séparer le code (moteur) des données * Viser la possibilité de créer des jeux différentes pour le même moteur * Concevoir le code le plus simple possible * Un jeu doit être contenu entièrement dans un fichier externe * Travailler sur github.com (eh oui, pour apprendre de le faire comme il faut) ! Des idées sur le monde du jeu Les carrés (locations) On divise le « monde » en carrés (voir l'illustration 1) numérotés. Format d'index de carrés : XXYYZZ. L'index servira d'index du ligne dans le fichier de données du jeu : XXYYZZ XXYYZZ etc Chaque carré peut avoir 6 sorties (voir l'illustration 1). À chaque sortie devrait être associé : * soit l'index du carré ou la sortie mène ; * soit l'index 000000, qui signifiera que cette sortie n'existe pas. Une location Le jeu procède d'une location à une autre. Dans chaque location le joueur devrait avoir : * un nom de location * une description de location * une liste des objets et monstres présents * une liste des actions <- mais je penche plutôt pour une liste général, applicable sur des objets * quoi d'autre ? À réfléchir! Est-ce qu'on présent les sorties (portes, fenêtres, escaliers, etc) dans la description, ou comme des objets ? Dans la description ? * Plus facile à réaliser (un plus) * Inamovible (un gros défaut) Comme des objets ? * Plus difficile à réaliser (un défaut) * On pourrait les manipuler (créer / modifier / détruire) dynamiquement dans le jeu ; exemples : ** il y a une porte cachée, on fait l'action « Chercher » et on la trouve (modifie l'attribut « Caché ») ; ** il y a une porte fermée, on a une clé et on fait l'action « Utiliser objet » sur porte » (modifie l'attribut « Fermé » ) ** on a une arme normale et une potion magique, on fait l'action « Utiliser objet » sur l'arme et ça ajoute une attaque / défense magique ; ** on à un coffre, on fait l'action « Ouvrir » sur lui et on trouve quelque chose dedans (ajouter un autre objet dans la locations) ; ** etc. Format de données Ici on ajoutera pour le moment les brouillons des formats du fichier données pour en discuter ensuite. Brouillon 1 Fonctionnement concret N1.P1 .OP1.EV1 = Piece vide avec 2 fenêtre et 2 porte (on vient d’une porte), on peux soit chercher, ouvrir la prochaine porte ou revenir en arrière. N1.P2.OP2.EV3 = Presence de monstre X, choix d’attaquer, fuir ou d’utiliser un item. Attaquer mene a N1.P1.OP3.EV3 = Attaque (choisis arme) tue le monstre, mene a >> N1.P1.OP1.EV2 . Je choisit de chercher, je trouve un tresor mene a >> N1.P1.OP1.EV1 (si on cherche la piece est vide car EV1 = piece vide) N1 + P1 = 1.1 (coordonnes sur le cube) = (Nord=Fenetre);(Ouest=Fenetre);(Est=Porte);(Sud=porte) ( pieces par étage, les pieces 1,3,7,9 represente les extremités, 5 le centre) Par defaut une piece 1 a Face nord une fenetre et face ouest une fenetre, les 2 autres des portes. ------- F --------------- F ------------------ F------------ | F ...... 1 ...........P......... 2.............P...........3 ..........F | |--------P ---------------- P ------------------ P------------ | F......... 4....... P .........5......... P.............6 .............F | Options : * 1=porte;3=revenir en arriere * 2=item * 3=(Sub attack)precedent * 4=(Item submenu)precedent * 5=coffre;2=Poursuivre son chemin(mène à option 1 Évènement (parfois linker à option) * 1=Piecevide lier a option 1 * 2=vide et objet cache lier a option 1 * 3=(banque de monstre separer) lier a option 2 * 4=au tresor * 5=Piege =si option 1 choix 1 est pas choisis = degat. Brouillon 2 ... Brouillons de code Sortie de texte #!/bin/bash # # print text on screen with a delay after each character (draft version) # print_text () { # Color codes for printf BLACK=$(tput setaf 0) RED=$(tput setaf 1) GREEN=$(tput setaf 2) YELLOW=$(tput setaf 3) LIME_YELLOW=$(tput setaf 190) POWDER_BLUE=$(tput setaf 153) BLUE=$(tput setaf 4) MAGENTA=$(tput setaf 5) CYAN=$(tput setaf 6) WHITE=$(tput setaf 7) BRIGHT=$(tput bold) NORMAL=$(tput sgr0) BLINK=$(tput blink) REVERSE=$(tput smso) UNDERLINE=$(tput smul) # Delay after each character, in 0.X s DELAY=05 # Text to type TEXT="$@" TEXT_LENGTH=${#TEXT} for ((i=0 ; i <= TEXT_LENGTH ; i++)) ; do case "${TEXT:i:1}" in '\' ) # Read the next char as control ? case "${TEXT:((i+1)):1}" in 'n' ) printf '\n' ;; 't' ) printf '\t' ;; 'b' ) printf "$BRIGHT" ;; 'u' ) printf "$UNDERLINE" ;; 'r' ) printf "$REVERSE" ;; '0' ) printf "$NORMAL" ;; * ) printf '%s' "${TEXT:((i+1)):1}" ;; esac ((i+=1)) ;; *) printf '%s' "${TEXT:i:1}" sleep "0.${DELAY}s" ;; esac done } Category:Jeu Category:Bash Category:Programmation Category:Game